1. Field of the Invention
The present invention relates to packet transmission and, particularly, to a system and method for optimizing a jitter buffer.
2. Description of the Related Art
When sending voice data across packet networks, such as telephony over LAN (ToL) or Voice over IP (VoIP) networks, the voice is usually compressed, packetized and, finally, sent across the network to the destination. When the packets are sent into the network, they are generated at a constant rate. However, due to behavior of the packet network, the even time intervals between the packets are lost as the packets transit the network. This irregularity in packet separation is referred to as xe2x80x9cjitter.xe2x80x9d Jitter can cause clicks, delays and other annoyances in multimedia transmission, creating overall poor reproduction quality.
A jitter buffer is often used to even out the packet separation. A jitter buffer is a FIFO (first in, first out) buffer in which packets leave the buffer at a predetermined, constant rate. Minimizing the amount of actual jitter buffering is important because the jitter buffering process introduces delays in the reproduced signal. As the delay increases, the echo perception becomes more pronounced, resulting in reduced voice quality. However, under-buffering increases the risk of emptying the payload from the jitter buffer before the subsequent packet arrives, resulting in reduced voice quality because of inter-packet gap.
Jitter rates vary throughout a transmission sequence. A jitter rate is the average variance in packet arrival times. It is measured as packets arrive over a specific implementation defined interval. The actual jitter rate reported (in accordance with IETF RFC 1889) is an exponentially averaged value of the jitter for each packet over the interval. The distribution of the averaged jitter rate is significantly different from the actual jitter values, so common queueing theory solutions are not applicable.
A jitter buffer designed with a constant predetermined depth is referred to as a static jitter buffer. A static jitter buffer does not recognize each sequence""s unique jitter characteristics and can not adjust itself to meet the needs of individual sequences. FIG. 1 illustrates buffer occupancy as a function of time. The jitter buffer has a maximum size TA. The jitter buffer is depleted at a constant rate, typically less than the arrival rate, represented by the downward sloping lines of common slope, m1-m6. Packets arrive at varying times (typically in blocks of 30-60 msec), t0-t5, resulting in the buffer occupancy xe2x80x9cjumps.xe2x80x9d As can be seen, a larger than usual inter-packet gap (and hence, buffer re-fill) occurs between times t2 and t3. However, the buffer is still depleted at the constant, predetermined rate. While packets arrive at times t3 and t4, if the inter-packet gap is larger than the time required to empty the buffer of any remaining packets, the buffer will be emptied, as seen at time t5. This causes gaps in the received speech, perceived as xe2x80x9cchoppiness.xe2x80x9d While the buffer size TA could be increased, too large a buffer results in delayed packets and speech degradation. The inflexibility of the static jitter buffer degrades the smoothing capability of the jitter buffering process, thereby failing to provide sufficient buffering for some sequences while unnecessarily delaying others.
These and other drawbacks in the prior art are overcome in large part by a system and method according to the present invention. A jitter buffer controller according to the present invention allows for dynamic adjustment of the jitter buffer depth. A system according to the present invention tunes the jitter buffer length according to the specific characteristics of the packet arrival rate.
According to one implementation, the contents of the jitter buffer are examined during a transmission. If the delay or average delay within the buffer drops to a predetermined threshold, then the size or depth of the jitter buffer is increased. A jitter buffer controller according to the present invention allows the depth of the jitter buffer to be adjusted dynamically according to the varying jitter of the current sequence. The jitter buffer controller may also maintain a cache of previous jitter values, i.e., the typical delays within the jitter buffer. The values may be analyzed and used, such as by averaging, to determine whether the depth of the jitter buffer should be increased, decreased, or maintained as is.